You can see a map of the Texas
ESC Regions here
library(tidyverse)
library(readxl)
library(plotly)
library(ggpubr)
library(gapminder)
library(kableExtra)
library(summarytools)
# Load TAPR data; rename vars
campus_2019 <- read.csv("docs/TAPR_2019_subset.csv") %>%
transmute(
cid = CAMPUS,
`African American` = CDB00A001219R,
`Hispanic` = CDH00A001219R,
`White` = CDW00A001219R,
aa_total = CDB00A001019D,
h_total = CDH00A001019D,
w_total = CDW00A001019D) %>%
# Filter out schools with no data (~ 10% of campuses)
filter(!is.na(`African American`) | !is.na(`Hispanic`) | !is.na(`White`))
# Pivot values and descriptive categories
data <- cbind(
pivot_longer(campus_2019 %>% select(1:4), cols = 2:4, names_to = "Student Group", values_to = "Meets Grade Level (%)"),
pivot_longer(campus_2019 %>% select(5:7), cols = 1:3, names_to = "group_denom", values_to = "Size of Student Group at School")) %>%
group_by(cid) %>%
mutate(
`Meets Grade Level (%)` = ifelse(`Meets Grade Level (%)` == -1, NA, `Meets Grade Level (%)`), # rate = -1 is masked data and unusable
`Size of Student Group at School` = ifelse(`Size of Student Group at School` == -1, NA, # denominator = -1 is masked data and unusable
`Size of Student Group at School`),
`Size of Student Group at School` = ifelse(`Size of Student Group at School` == -3, # denominator = -3 is second smallest group
nth(`Size of Student Group at School`, 2, order_by = `Size of Student Group at School`) / 2,
`Size of Student Group at School`), # recover with reasonable proxy of half largest group
ln_meets_denom = log(`Size of Student Group at School`)) %>% # log will be better for size parameter
ungroup()
school <- read_excel("docs/school.xlsx")
school <- school %>%
transmute(
Campus = `Campus or District`,
`Eco. Disadvantaged (%)` = `% Eco Disadvantaged`,
`Campus Type` = factor(`Entity Type`),
enrollment_public = Enrollment) %>%
mutate(
n = str_split(Campus, " \\|\\|", simplify = TRUE)[,2], # First split on "||"
nn = str_split(n, " \\(", simplify = TRUE)[,2], # Next splot on " ("
nnn = str_split(n, " \\(", simplify = TRUE)[,3], # A few have an additional " ("
cid = as.numeric(gsub("\\D+", "", nn)),
cid = ifelse(is.na(cid), as.numeric(gsub("\\D+", "", nnn)), cid)) %>%
select(-starts_with("n"))
codes <- read_csv("docs/school and district.csv")
codes <- codes %>%
transmute(
cid = as.numeric(gsub("[^[:alnum:] ]", "", `School Number`)),
district = as.numeric(gsub("[^[:alnum:] ]", "", `District Number`)),
county = as.numeric(gsub("[^[:alnum:] ]", "", `County Number`)),
region = as.numeric(gsub("[^[:alnum:] ]", "", `ESC Region Served`)))
campus <- left_join(school, codes, by = "cid") %>% right_join(data, by = "cid") %>%
filter(!is.na(Campus))
r <- 1:20
# Blank list for full sample objects
fs <- list()
# Create function to generate 20 plots
plots <- function(data, r, type) {
t <- ggplot(data = campus %>% filter(`Campus Type` == {{type}} & region == {{r}}),
aes(label = `Campus`, label2 = `Size of Student Group at School`, x = `Eco. Disadvantaged (%)`, y = `Meets Grade Level (%)`)) +
geom_line(alpha = .3, aes(group = cid)) +
geom_point(alpha = .4, aes(size = `Size of Student Group at School`, color = `Student Group`)) +
geom_smooth(size = 2, method = loess, color = "black", se = FALSE, aes(group = `Student Group`, weight = ln_meets_denom)) +
geom_smooth(size = 1.8, method = loess, se = FALSE, aes(color = `Student Group`, weight = ln_meets_denom)) +
guides(size = FALSE) +
theme(legend.position = "bottom") +
xlim(c(0,100)) + ylim(c(0,100)) +
ggtitle(paste("Region", {{r}}, {{type}}, "Performance by Race/Ethnicity and Poverty", sep = " "))
t[[r]] <- ggplotly(t, tooltip = c("label", "label2", "x", "y"))
#print(t[[r]])
#return(t[[r]])
}
# Stores high school plots for 20 regions in indexed list
gg_hs <- lapply(r, plots, data = campus, type = "High School")
# Stores high school plots for 20 regions in indexed list
gg_jhs <- lapply(r, plots, data = campus, type = "Middle & Jr. High School")
# Stores elementary school plots for 20 regions in indexed list
gg_es <- lapply(r, plots, data = campus, type = "Elementary School")
# Use this function to generate object names, then search and remove extra text.
# for (i in 1:20){
# print(paste("gg_hs[[", i, "]], ", sep = ""))
# print(paste("gg_jhs[[", i, "]], ", sep = ""))
# print(paste("gg_es[[", i, "]], ", sep = ""))
# }
htmltools::tagList(list(gg_hs[[1]],
gg_jhs[[1]],
gg_es[[1]],
gg_hs[[2]],
gg_jhs[[2]],
gg_es[[2]],
gg_hs[[3]],
gg_jhs[[3]],
gg_es[[3]],
gg_hs[[4]],
gg_jhs[[4]],
gg_es[[4]],
gg_hs[[5]],
gg_jhs[[5]],
gg_es[[5]],
gg_hs[[6]],
gg_jhs[[6]],
gg_es[[6]],
gg_hs[[7]],
gg_jhs[[7]],
gg_es[[7]],
gg_hs[[8]],
gg_jhs[[8]],
gg_es[[8]],
gg_hs[[9]],
gg_jhs[[9]],
gg_es[[9]],
gg_hs[[10]],
gg_jhs[[10]],
gg_es[[10]],
gg_hs[[11]],
gg_jhs[[11]],
gg_es[[11]],
gg_hs[[12]],
gg_jhs[[12]],
gg_es[[12]],
gg_hs[[13]],
gg_jhs[[13]],
gg_es[[13]],
gg_hs[[14]],
gg_jhs[[14]],
gg_es[[14]],
gg_hs[[15]],
gg_jhs[[15]],
gg_es[[15]],
gg_hs[[16]],
gg_jhs[[16]],
gg_es[[16]],
gg_hs[[17]],
gg_jhs[[17]],
gg_es[[17]],
gg_hs[[18]],
gg_jhs[[18]],
gg_es[[18]],
gg_hs[[19]],
gg_jhs[[19]],
gg_es[[19]],
gg_hs[[20]],
gg_jhs[[20]],
gg_es[[20]]))
LS0tDQp0aXRsZTogIkFsbCBSZWdpb25zIGFuZCBDYW1wdXMgTGV2ZWxzIg0KLS0tDQoNCllvdSBjYW4gc2VlIGEgbWFwIG9mIHRoZSBbVGV4YXMgRVNDIFJlZ2lvbnMgaGVyZV0oaHR0cHM6Ly9ycHRzdnIxLnRlYS50ZXhhcy5nb3YvcGVyZnJlcG9ydC9zbmFwc2hvdC8yMDIwL3JlZ2lvbi5zcmNoLmh0bWwpDQoNCmBgYHtyLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgY2xhc3Muc291cmNlID0gJ2ZvbGQtaGlkZSd9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShwbG90bHkpDQpsaWJyYXJ5KGdncHVicikNCmxpYnJhcnkoZ2FwbWluZGVyKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KbGlicmFyeShzdW1tYXJ5dG9vbHMpDQoNCiMgTG9hZCBUQVBSIGRhdGE7IHJlbmFtZSB2YXJzDQpjYW1wdXNfMjAxOSA8LSByZWFkLmNzdigiZG9jcy9UQVBSXzIwMTlfc3Vic2V0LmNzdiIpICU+JQ0KICB0cmFuc211dGUoDQogICAgY2lkID0gQ0FNUFVTLA0KICAgIGBBZnJpY2FuIEFtZXJpY2FuYCA9IENEQjAwQTAwMTIxOVIsDQogICAgYEhpc3BhbmljYCA9IENESDAwQTAwMTIxOVIsDQogICAgYFdoaXRlYCA9IENEVzAwQTAwMTIxOVIsDQogICAgYWFfdG90YWwgPSBDREIwMEEwMDEwMTlELA0KICAgIGhfdG90YWwgPSBDREgwMEEwMDEwMTlELA0KICAgIHdfdG90YWwgPSBDRFcwMEEwMDEwMTlEKSAlPiUNCiAgIyBGaWx0ZXIgb3V0IHNjaG9vbHMgd2l0aCBubyBkYXRhICh+IDEwJSBvZiBjYW1wdXNlcykNCiAgZmlsdGVyKCFpcy5uYShgQWZyaWNhbiBBbWVyaWNhbmApIHwgIWlzLm5hKGBIaXNwYW5pY2ApIHwgIWlzLm5hKGBXaGl0ZWApKQ0KIyBQaXZvdCB2YWx1ZXMgYW5kIGRlc2NyaXB0aXZlIGNhdGVnb3JpZXMNCmRhdGEgPC0gY2JpbmQoDQogIHBpdm90X2xvbmdlcihjYW1wdXNfMjAxOSAlPiUgc2VsZWN0KDE6NCksIGNvbHMgPSAyOjQsIG5hbWVzX3RvID0gIlN0dWRlbnQgR3JvdXAiLCB2YWx1ZXNfdG8gPSAiTWVldHMgR3JhZGUgTGV2ZWwgKCUpIiksDQogIHBpdm90X2xvbmdlcihjYW1wdXNfMjAxOSAlPiUgc2VsZWN0KDU6NyksIGNvbHMgPSAxOjMsIG5hbWVzX3RvID0gImdyb3VwX2Rlbm9tIiwgdmFsdWVzX3RvID0gIlNpemUgb2YgU3R1ZGVudCBHcm91cCBhdCBTY2hvb2wiKSkgJT4lDQogIGdyb3VwX2J5KGNpZCkgJT4lDQogIG11dGF0ZSgNCiAgICBgTWVldHMgR3JhZGUgTGV2ZWwgKCUpYCA9IGlmZWxzZShgTWVldHMgR3JhZGUgTGV2ZWwgKCUpYCA9PSAtMSwgTkEsIGBNZWV0cyBHcmFkZSBMZXZlbCAoJSlgKSwgIyByYXRlID0gLTEgaXMgbWFza2VkIGRhdGEgYW5kIHVudXNhYmxlDQogICAgYFNpemUgb2YgU3R1ZGVudCBHcm91cCBhdCBTY2hvb2xgID0gaWZlbHNlKGBTaXplIG9mIFN0dWRlbnQgR3JvdXAgYXQgU2Nob29sYCA9PSAtMSwgTkEsICMgZGVub21pbmF0b3IgPSAtMSBpcyBtYXNrZWQgZGF0YSBhbmQgdW51c2FibGUNCiAgICAgICAgICAgICAgICAgICAgIGBTaXplIG9mIFN0dWRlbnQgR3JvdXAgYXQgU2Nob29sYCksIA0KICAgIGBTaXplIG9mIFN0dWRlbnQgR3JvdXAgYXQgU2Nob29sYCA9IGlmZWxzZShgU2l6ZSBvZiBTdHVkZW50IEdyb3VwIGF0IFNjaG9vbGAgPT0gLTMsICMgZGVub21pbmF0b3IgPSAtMyBpcyBzZWNvbmQgc21hbGxlc3QgZ3JvdXANCiAgICAgICAgICAgICAgICAgICAgIG50aChgU2l6ZSBvZiBTdHVkZW50IEdyb3VwIGF0IFNjaG9vbGAsIDIsIG9yZGVyX2J5ID0gYFNpemUgb2YgU3R1ZGVudCBHcm91cCBhdCBTY2hvb2xgKSAvIDIsIA0KICAgICAgICAgICAgICAgICAgICAgYFNpemUgb2YgU3R1ZGVudCBHcm91cCBhdCBTY2hvb2xgKSwgIyByZWNvdmVyIHdpdGggcmVhc29uYWJsZSBwcm94eSBvZiBoYWxmIGxhcmdlc3QgZ3JvdXANCiAgICBsbl9tZWV0c19kZW5vbSA9IGxvZyhgU2l6ZSBvZiBTdHVkZW50IEdyb3VwIGF0IFNjaG9vbGApKSAlPiUgIyBsb2cgd2lsbCBiZSBiZXR0ZXIgZm9yIHNpemUgcGFyYW1ldGVyDQogIHVuZ3JvdXAoKQ0KDQpzY2hvb2wgPC0gcmVhZF9leGNlbCgiZG9jcy9zY2hvb2wueGxzeCIpDQpzY2hvb2wgPC0gc2Nob29sICU+JQ0KICB0cmFuc211dGUoDQogICAgQ2FtcHVzID0gYENhbXB1cyBvciBEaXN0cmljdGAsIA0KICAgIGBFY28uIERpc2FkdmFudGFnZWQgKCUpYCA9IGAlIEVjbyBEaXNhZHZhbnRhZ2VkYCwNCiAgICBgQ2FtcHVzIFR5cGVgID0gZmFjdG9yKGBFbnRpdHkgVHlwZWApLA0KICAgIGVucm9sbG1lbnRfcHVibGljID0gRW5yb2xsbWVudCkgJT4lDQogIG11dGF0ZSgNCiAgICBuID0gc3RyX3NwbGl0KENhbXB1cywgIiBcXHxcXHwiLCBzaW1wbGlmeSA9IFRSVUUpWywyXSwgIyBGaXJzdCBzcGxpdCBvbiAifHwiDQogICAgbm4gPSBzdHJfc3BsaXQobiwgIiBcXCgiLCBzaW1wbGlmeSA9IFRSVUUpWywyXSwgIyBOZXh0IHNwbG90IG9uICIgKCINCiAgICBubm4gPSBzdHJfc3BsaXQobiwgIiBcXCgiLCBzaW1wbGlmeSA9IFRSVUUpWywzXSwgIyBBIGZldyBoYXZlIGFuIGFkZGl0aW9uYWwgIiAoIg0KICAgIGNpZCA9IGFzLm51bWVyaWMoZ3N1YigiXFxEKyIsICIiLCBubikpLA0KICAgIGNpZCA9IGlmZWxzZShpcy5uYShjaWQpLCBhcy5udW1lcmljKGdzdWIoIlxcRCsiLCAiIiwgbm5uKSksIGNpZCkpICU+JQ0KICBzZWxlY3QoLXN0YXJ0c193aXRoKCJuIikpDQoNCmNvZGVzIDwtIHJlYWRfY3N2KCJkb2NzL3NjaG9vbCBhbmQgZGlzdHJpY3QuY3N2IikNCmNvZGVzIDwtIGNvZGVzICU+JQ0KICB0cmFuc211dGUoDQogICAgY2lkID0gYXMubnVtZXJpYyhnc3ViKCJbXls6YWxudW06XSBdIiwgIiIsIGBTY2hvb2wgTnVtYmVyYCkpLA0KICAgIGRpc3RyaWN0ID0gYXMubnVtZXJpYyhnc3ViKCJbXls6YWxudW06XSBdIiwgIiIsIGBEaXN0cmljdCBOdW1iZXJgKSksDQogICAgY291bnR5ID0gYXMubnVtZXJpYyhnc3ViKCJbXls6YWxudW06XSBdIiwgIiIsIGBDb3VudHkgTnVtYmVyYCkpLA0KICAgIHJlZ2lvbiA9IGFzLm51bWVyaWMoZ3N1YigiW15bOmFsbnVtOl0gXSIsICIiLCBgRVNDIFJlZ2lvbiBTZXJ2ZWRgKSkpDQoNCmNhbXB1cyA8LSBsZWZ0X2pvaW4oc2Nob29sLCBjb2RlcywgYnkgPSAiY2lkIikgJT4lIHJpZ2h0X2pvaW4oZGF0YSwgYnkgPSAiY2lkIikgJT4lDQogIGZpbHRlcighaXMubmEoQ2FtcHVzKSkNCg0KciA8LSAxOjIwDQojIEJsYW5rIGxpc3QgZm9yIGZ1bGwgc2FtcGxlIG9iamVjdHMNCmZzIDwtIGxpc3QoKQ0KIyBDcmVhdGUgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgMjAgcGxvdHMNCnBsb3RzIDwtIGZ1bmN0aW9uKGRhdGEsIHIsIHR5cGUpIHsNCg0KdCA8LSAgZ2dwbG90KGRhdGEgPSBjYW1wdXMgJT4lIGZpbHRlcihgQ2FtcHVzIFR5cGVgID09IHt7dHlwZX19ICYgcmVnaW9uID09IHt7cn19KSwgDQogICAgICAgICBhZXMobGFiZWwgPSBgQ2FtcHVzYCwgbGFiZWwyID0gYFNpemUgb2YgU3R1ZGVudCBHcm91cCBhdCBTY2hvb2xgLCB4ID0gYEVjby4gRGlzYWR2YW50YWdlZCAoJSlgLCB5ID0gYE1lZXRzIEdyYWRlIExldmVsICglKWApKSArDQogIGdlb21fbGluZShhbHBoYSA9IC4zLCBhZXMoZ3JvdXAgPSBjaWQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAuNCwgYWVzKHNpemUgPSBgU2l6ZSBvZiBTdHVkZW50IEdyb3VwIGF0IFNjaG9vbGAsIGNvbG9yID0gYFN0dWRlbnQgR3JvdXBgKSkgKw0KICBnZW9tX3Ntb290aChzaXplID0gMiwgbWV0aG9kID0gbG9lc3MsIGNvbG9yID0gImJsYWNrIiwgc2UgPSBGQUxTRSwgYWVzKGdyb3VwID0gYFN0dWRlbnQgR3JvdXBgLCB3ZWlnaHQgPSBsbl9tZWV0c19kZW5vbSkpICsNCiAgZ2VvbV9zbW9vdGgoc2l6ZSA9IDEuOCwgbWV0aG9kID0gbG9lc3MsIHNlID0gRkFMU0UsIGFlcyhjb2xvciA9IGBTdHVkZW50IEdyb3VwYCwgd2VpZ2h0ID0gbG5fbWVldHNfZGVub20pKSArDQogIGd1aWRlcyhzaXplID0gRkFMU0UpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsNCiAgeGxpbShjKDAsMTAwKSkgKyB5bGltKGMoMCwxMDApKSArIA0KICAgIGdndGl0bGUocGFzdGUoIlJlZ2lvbiIsIHt7cn19LCB7e3R5cGV9fSwgIlBlcmZvcm1hbmNlIGJ5IFJhY2UvRXRobmljaXR5IGFuZCBQb3ZlcnR5Iiwgc2VwID0gIiAiKSkNCiAgDQp0W1tyXV0gPC0gZ2dwbG90bHkodCwgdG9vbHRpcCA9IGMoImxhYmVsIiwgImxhYmVsMiIsICJ4IiwgInkiKSkNCg0KI3ByaW50KHRbW3JdXSkNCiNyZXR1cm4odFtbcl1dKQ0KfQ0KDQojIFN0b3JlcyBoaWdoIHNjaG9vbCBwbG90cyBmb3IgMjAgcmVnaW9ucyBpbiBpbmRleGVkIGxpc3QNCmdnX2hzIDwtIGxhcHBseShyLCBwbG90cywgZGF0YSA9IGNhbXB1cywgdHlwZSA9ICJIaWdoIFNjaG9vbCIpDQoNCiMgU3RvcmVzIGhpZ2ggc2Nob29sIHBsb3RzIGZvciAyMCByZWdpb25zIGluIGluZGV4ZWQgbGlzdA0KZ2dfamhzIDwtIGxhcHBseShyLCBwbG90cywgZGF0YSA9IGNhbXB1cywgdHlwZSA9ICJNaWRkbGUgJiBKci4gSGlnaCBTY2hvb2wiKQ0KDQojIFN0b3JlcyBlbGVtZW50YXJ5IHNjaG9vbCBwbG90cyBmb3IgMjAgcmVnaW9ucyBpbiBpbmRleGVkIGxpc3QNCmdnX2VzIDwtIGxhcHBseShyLCBwbG90cywgZGF0YSA9IGNhbXB1cywgdHlwZSA9ICJFbGVtZW50YXJ5IFNjaG9vbCIpDQoNCg0KDQpgYGANCmBgYHtyLCByZXN1bHRzID0gImFzaXMiLCB3YXJuaW5nPUYsIG1lc3NhZ2U9RiwgY2xhc3Muc291cmNlID0gJ2ZvbGQtaGlkZSd9DQojIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIG9iamVjdCBuYW1lcywgdGhlbiBzZWFyY2ggYW5kIHJlbW92ZSBleHRyYSB0ZXh0Lg0KIyBmb3IgKGkgaW4gMToyMCl7DQojICAgcHJpbnQocGFzdGUoImdnX2hzW1siLCBpLCAiXV0sICIsIHNlcCA9ICIiKSkNCiMgICBwcmludChwYXN0ZSgiZ2dfamhzW1siLCBpLCAiXV0sICIsIHNlcCA9ICIiKSkNCiMgICBwcmludChwYXN0ZSgiZ2dfZXNbWyIsIGksICJdXSwgIiwgc2VwID0gIiIpKQ0KIyB9DQoNCg0KaHRtbHRvb2xzOjp0YWdMaXN0KGxpc3QoZ2dfaHNbWzFdXSwgDQpnZ19qaHNbWzFdXSwgDQpnZ19lc1tbMV1dLCANCmdnX2hzW1syXV0sIA0KZ2dfamhzW1syXV0sIA0KZ2dfZXNbWzJdXSwgDQpnZ19oc1tbM11dLCANCmdnX2poc1tbM11dLCANCmdnX2VzW1szXV0sIA0KZ2dfaHNbWzRdXSwgDQpnZ19qaHNbWzRdXSwgDQpnZ19lc1tbNF1dLCANCmdnX2hzW1s1XV0sIA0KZ2dfamhzW1s1XV0sIA0KZ2dfZXNbWzVdXSwgDQpnZ19oc1tbNl1dLCANCmdnX2poc1tbNl1dLCANCmdnX2VzW1s2XV0sIA0KZ2dfaHNbWzddXSwgDQpnZ19qaHNbWzddXSwgDQpnZ19lc1tbN11dLCANCmdnX2hzW1s4XV0sIA0KZ2dfamhzW1s4XV0sIA0KZ2dfZXNbWzhdXSwgDQpnZ19oc1tbOV1dLCANCmdnX2poc1tbOV1dLCANCmdnX2VzW1s5XV0sIA0KZ2dfaHNbWzEwXV0sIA0KZ2dfamhzW1sxMF1dLCANCmdnX2VzW1sxMF1dLCANCmdnX2hzW1sxMV1dLCANCmdnX2poc1tbMTFdXSwgDQpnZ19lc1tbMTFdXSwgDQpnZ19oc1tbMTJdXSwgDQpnZ19qaHNbWzEyXV0sIA0KZ2dfZXNbWzEyXV0sIA0KZ2dfaHNbWzEzXV0sIA0KZ2dfamhzW1sxM11dLCANCmdnX2VzW1sxM11dLCANCmdnX2hzW1sxNF1dLCANCmdnX2poc1tbMTRdXSwgDQpnZ19lc1tbMTRdXSwgDQpnZ19oc1tbMTVdXSwgDQpnZ19qaHNbWzE1XV0sIA0KZ2dfZXNbWzE1XV0sIA0KZ2dfaHNbWzE2XV0sIA0KZ2dfamhzW1sxNl1dLCANCmdnX2VzW1sxNl1dLCANCmdnX2hzW1sxN11dLCANCmdnX2poc1tbMTddXSwgDQpnZ19lc1tbMTddXSwgDQpnZ19oc1tbMThdXSwgDQpnZ19qaHNbWzE4XV0sIA0KZ2dfZXNbWzE4XV0sIA0KZ2dfaHNbWzE5XV0sIA0KZ2dfamhzW1sxOV1dLCANCmdnX2VzW1sxOV1dLCANCmdnX2hzW1syMF1dLCANCmdnX2poc1tbMjBdXSwgDQpnZ19lc1tbMjBdXSkpDQoNCmBgYA0KDQo=